/*
** Copyright (C) 2010 Calin Radoni
**
** This file is part of CHScanner.
**
** CHScanner is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** CHScanner is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with CHScanner. If not, see <http://www.gnu.org/licenses/>.
*/

#pragma once
#include "afxwin.h"

#include "MSkin.h"
#include "MHelpInfo.h"

enum RgnDialogButtonType
{
	__rgbtMove,
	__rgbtSize
};

/*! \brief The base class for all skinable windows
*/
class CRgnDialog : public CDialog
{
	DECLARE_DYNAMIC(CRgnDialog)

protected:
	int transparency;
	bool SetTransparency(void);

	MSkin* skin;
	bool CreateRegion(void);

	bool isSizable;

	CString wndCaption;

	int XX, YY;
	bool moving, sizing;
	void StartMoving(int, int);
	void StartSizing(int, int);
	void DraggedTo(int, int);
	void DraggingStopped(void);

	CStatic *ctrlMove;
	CStatic *ctrlSize;
	bool CreateMoveControl(void);
	bool CreateSizeControl(void);
		bool CreateStaticControl(RgnDialogButtonType);
	void DestroyMoveControl(void);
	void DestroySizeControl(void);
		void DestroyStaticControl(RgnDialogButtonType);
	void MoveMoveControl(void);
	void MoveSizeControl(void);
		void MoveStaticControl(RgnDialogButtonType);

	RECT clientRect;

	virtual void ResizeChilds(void);
	virtual bool GetMinimumSize(RECT*);

	MHelpInfo *helpInfo;

	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
	afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
	afx_msg void OnMouseMove(UINT nFlags, CPoint point);
	afx_msg void OnPaint();
	afx_msg void OnSize(UINT nType, int cx, int cy);
	afx_msg BOOL OnEraseBkgnd(CDC* pDC);
	afx_msg void OnNcPaint();
	afx_msg BOOL OnHelpInfo(HELPINFO* pHelpInfo);

	DECLARE_MESSAGE_MAP()

public:
	CRgnDialog(UINT templateIdIn, CWnd* pParent = NULL);   // standard constructor
	virtual ~CRgnDialog();

//	enum { IDD = IDD_RGNDIALOG };

	bool SetProperties(MSkin*, bool, CString);

	void SetHelpInfo(MHelpInfo*, UINT);
	bool ShowHelp(void);
};
